package com.ruoyi.ucenter.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.model.user.UserInfo;
import com.ruoyi.model.user.UserInformation;
import com.ruoyi.model.user.dto.*;
import com.ruoyi.model.user.form.UserInfoForm;
import com.ruoyi.model.user.vo.UserInfoVo;

import java.util.List;
import java.util.Map;

public interface IUserInfoService extends IService<UserInfo> {
    /**
     * 添加接口
     *
     * @param information 获奖信息
     * @return int
     */
    int saveInformation(UserInformation information);

    /**
     * 注册用户-手机号注册
     *
     * @param userPhoneRegisterDto 前端表单
     * @return R
     */
    R<String> phoneRegisterByDTO(UserPhoneRegisterDto userPhoneRegisterDto);

    /**
     * 根据手机号码登录
     *
     * @param loginUserDto 前端表单
     * @return Map
     */
    Map<String, Object> loginByPhone(LoginUserDto loginUserDto);

    Map<String, Object> loginByMail(LoginUserDto loginUserDto);

    /**
     * 根据平台账号密码登录
     *
     * @param loginUserDto 前端表单
     * @return Map
     */
    Map<String, Object> loginByApp(LoginUserDto loginUserDto);

    /**
     * 根据当前用户登录用户id获取到此人的详细信息
     *
     * @param userInfo 用户对象
     * @return userInfoVo
     */
    UserInfoVo selectUserInfo(UserInfo userInfo);

    /**
     * 修改用户基本信息 展示只考虑基本用户信息
     *
     * @param userId      用户id
     * @param userInfoForm 用户个人信息
     * @return 影响行数
     */
    int editUserInfoById(String userId, UserInfoForm userInfoForm);

    /**
     * 修改用户账号信息
     *
     * @param userId      用户id
     * @param userInfoDto 用户个人信息
     * @return
     */
    int editSecureUserInfo(String userId, UserInfoDto userInfoDto);

    /**
     * 验证是否能修改重要信息
     *
     * @param type
     * @param checkCode
     * @return
     */
    boolean checkPEP(int type, String checkCode);

    int editPEP(int type, String checkCode, String change);

    /**
     * 查询用户信息列表
     *
     * @param userInfo 用户信息
     * @return 用户信息集合
     */
    public List<UserInfo> selectUserInfoList(UserInfo userInfo);


    List<UserInformation> getInformation();

    UserInformation getInformationById(String id);

    /**
     * 注册接口-邮箱注册
     *
     * @param userRegisterDto 注册表单
     * @return R<String>
     */
    R<String> emailRegisterByDTO(UserEmailRegisterDto userRegisterDto);

    /**
     * 基本用户注册功能
     * @param userInfoDto 注册表单
     * @return
     */
    R<String> baseRegister(UserInfoRegisterDto userInfoDto);
}
